<!DOCTYPE html>
<html>
  <head>
    <title>
      Test AudioScheduledSourceNode
    </title>
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
    <script src="resources/audit.js"></script>
  </head>
  <body>
    <script id="layout-test-code">
      let context = new AudioContext();

      let audit = Audit.createTaskRunner();

      audit.define(
          {
            label: 'construction',
            description: 'Construct AudioScheduledSourceNode'
          },
          function(task, should) {
            should(function() {
              return new AudioScheduledSourceNode(context);
            }, 'new AudioScheduledSourceNode(c)').throw(TypeError);

            task.done();
          });

      audit.define(
          {
            label: 'properties',
            description: 'Test properties on derived nodes'
          },
          function(task, should) {
            let expectedProperties = ['start', 'stop', 'onended'];

            // AudioScheduledSourceNode must have these properties.
            for (p in expectedProperties) {
              should(
                  AudioScheduledSourceNode.prototype,
                  'AudioScheduledSourceNode.prototype')
                  .haveOwnProperty(expectedProperties[p]);
            }

            // ConstantSource and Oscillator must not
            let nodes = ['ConstantSourceNode', 'OscillatorNode'];
            for (n in nodes) {
              for (p in expectedProperties) {
                should(window[nodes[n]].prototype, nodes[n] + '.prototype')
                    .notHaveOwnProperty(expectedProperties[p]);
              }
            }

            // AudioBufferSourceNode has it's own start method, but should not
            // have the others.
            for (p in expectedProperties) {
              if (expectedProperties[p] !== 'start') {
                should(
                    AudioBufferSourceNode.prototype,
                    'AudioBufferSourceNode.prototype')
                    .notHaveOwnProperty(expectedProperties[p]);
              }
            }

            should(
                AudioBufferSourceNode.prototype,
                'AudioBufferSourceNode.prototype')
                .haveOwnProperty('start');

            task.done();
          });

      audit.run();
    </script>
  </body>
</html>
